Task Information

Total Number of Trials = 104

Sweet taste and bitter taste was selected by participant to reflect reward & punishment

Learning Curves for each Shape Pair

all_plot<-ggarrange(plot1, plot2, plot3, 
          labels = c("80/20 pair", "70/30 pair", "60/40 pair"), 
          ncol = 3, nrow = 1)
Removed 2 rows containing missing values (geom_path).Removed 2 rows containing missing values (geom_point).Removed 3 rows containing missing values (geom_path).Removed 3 rows containing missing values (geom_point).
all_plot

Learning Curves Together

plot4

Begin Processing Graphs for Each Participant

Plot “Heatmaps” of Outcomes During Training

mydata$outcome0[mydata$outcome == "Miss"] <- 0
Unknown or uninitialised column: 'outcome0'.
mydata$outcome0[mydata$outcome == "punish"] <- -10
mydata$outcome0[mydata$outcome == "reward"] <- 10
hmTOTAL<-ggplot(mydata,aes(as.numeric(Count), as.factor(sub_num) , fill=outcome0))+
  geom_tile()+
  scale_fill_gradient2(low="red", high="green", na.value="black", name="")+
  theme_classic()+ xlab(label = "Trial") + ylab(label= 'Subject Number')+
  guides(fill=guide_legend(title='Outcome'))
  #geom_point(aes(shape=as.factor(choice), size=1, color=as.factor(choice)))

Plot “Heatmaps” of Outcomes During Training

-10 (red) = punishment (bitter taste)

0 (white) = missed press (no taste)

10 (green) = reward (sweet taste)

hmTOTAL

Overlay with Shape Selected & Outcome

hmTOTAL1

Split Into Groups Based on Posttest Performance

summary(data0$sensitivity_reward)
   Min. 1st Qu.  Median    Mean 3rd Qu.    Max.    NA's 
 0.2917  0.4444  0.5000  0.5096  0.5789  0.7500     104 
data0$learn[data0$sensitivity_reward < 0.444]<- "didn't learn"
data0$learn[data0$sensitivity_reward >= 0.444 & data0$sensitivity_reward < 0.5  ]<- "maybe learn"
data0$learn[ data0$sensitivity_reward >= 0.5 & data0$sensitivity_reward < 0.57 ]<- "ok"
data0$learn[ data0$sensitivity_reward >= 0.57]<- "pretty good"
summary(as.factor(data0$learn))
didn't learn  maybe learn           ok  pretty good         NA's 
        2211         1541         2609         2643          104 
hmTOTALgood<-ggplot(subset(data0, learn == "pretty good"),aes(as.numeric(Count), as.factor(sub_num) ,fill=outcome0))+
  geom_tile()+
  scale_fill_gradient2(low="red", high="green", na.value="black", name="") +
  theme_classic()+ xlab(label = "Trial") + ylab(label= 'Subject Number') +
  guides(fill=guide_legend(title='Outcome')) 
  #geom_point(aes(shape=as.factor(choice), size=1, color=as.factor(choice)))
#hmTOTALgood
hmTOTALbad<-ggplot(subset(data0, learn == "didn't learn"),aes(as.numeric(Count), as.factor(sub_num) ,fill=outcome0))+
  geom_tile()+
  scale_fill_gradient2(low="red", high="green", na.value="black", name="") +
  theme_classic()+ xlab(label = "Trial") + ylab(label= 'Subject Number') +
  guides(fill=guide_legend(title='Outcome')) 
  #geom_point(aes(shape=as.factor(choice), size=1, color=as.factor(choice)))
#hmTOTALbad
test1<-ggarrange(hmTOTALgood,hmTOTALbad, 
          labels = c("Good Posttest", "Bad Posttest"), 
          ncol = 1, nrow = 2)

Split Into Groups Based on Posttest Performance

test1

Plot “Heatmaps” of Choices During Training

-30 (pink) = Choose F (40% correct)

-20 (mid pink) = Choose D (30% correct)

-10 (light pink) = Choose B (20% correct)

0 (white) = missed press (no choice)

10 (light blue) = Choose E (60% correct)

20 (mid blue) = Choose C (70% correct)

30 (blue) = Choose A (80% correct)

test2

Are there differences in training between posstest groups?

mytable <- xtabs(~choice+learn, data=data0)
ftable(mytable) # print table 
       learn didn't learn maybe learn  ok pretty good
choice                                               
A                     362         248 417         460
B                     331         242 420         441
C                     359         236 401         425
D                     353         240 413         377
E                     332         224 410         407
F                     358         270 384         418
Miss                  116          81 164         115
summary(mytable) # chi-square test of indepedence
Call: xtabs(formula = ~choice + learn, data = data0)
Number of cases in table: 9004 
Number of factors: 2 
Test for independence of all factors:
    Chisq = 23.464, df = 18, p-value = 0.1734
mytable <- xtabs(~outcome+learn, data=data0)
ftable(mytable) # print table 
        learn didn't learn maybe learn   ok pretty good
outcome                                                
Miss                   116          81  164         115
punish                1032         717 1218        1227
reward                1063         743 1227        1301
summary(mytable) # chi-square test of indepedence
Call: xtabs(formula = ~outcome + learn, data = data0)
Number of cases in table: 9004 
Number of factors: 2 
Test for independence of all factors:
    Chisq = 10.656, df = 6, p-value = 0.09961
mytable <- xtabs(~congruent+learn, data=data0)
ftable(mytable) # print table 
           learn didn't learn maybe learn   ok pretty good
congruent                                                 
matched                  1489         997 1734        1777
mismatched                606         463  711         751
Miss                      116          81  164         115
summary(mytable) # chi-square test of indepedence
Call: xtabs(formula = ~congruent + learn, data = data0)
Number of cases in table: 9004 
Number of factors: 2 
Test for independence of all factors:
    Chisq = 13.713, df = 6, p-value = 0.03301

Ah ha moment

There is a difference between the number of mismatched trials in the “learners” and “non learners.” Those who “don’t learn” have more mismatches.

Histograms

LS0tCnRpdGxlOiAiQmV2ZWwgUHJvYmFiaWxpc3RpYyBTZWxlY3Rpb24gVGFzayBQZXJmb3JtYW5jZSIKb3V0cHV0OgogIHdvcmRfZG9jdW1lbnQ6IGRlZmF1bHQKICBodG1sX25vdGVib29rOiBkZWZhdWx0CiAgaHRtbF9kb2N1bWVudDoKICAgIGRmX3ByaW50OiBwYWdlZAotLS0KIyMgVGFzayBJbmZvcm1hdGlvbgojVG90YWwgTnVtYmVyIG9mIFRyaWFscyA9IDEwNCAKI1N3ZWV0IHRhc3RlIGFuZCBiaXR0ZXIgdGFzdGUgd2FzIHNlbGVjdGVkIGJ5IHBhcnRpY2lwYW50IHRvIHJlZmxlY3QgcmV3YXJkICYgcHVuaXNobWVudAojCiMKCmBgYHtyLCBlY2hvPUZBTFNFLCByZXN1bHRzPSdoaWRlJywgbWVzc2FnZT1GQUxTRX0KbGlicmFyeShkcGx5cikKbGlicmFyeSh0aWR5cikKbGlicmFyeShnZ3Bsb3QyKQpsaWJyYXJ5KHJlc2hhcGUpCmxpYnJhcnkoZ2dwdWJyKQoKZGF0YSA8LSByZWFkLmRlbGltKCJ+L0RvY3VtZW50cy9iZXZlbF9jaG9pY2UvYWxsX3N1YmplY3RzLnR4dCIpCm5hbWVzKGRhdGEpIDwtIGMoInN1YmoiLCAicnVuIiwgInBhaXIiLCAiY2hvaWNlIiwgIm91dGNvbWUiLCAiY29uZ3J1ZW50IiwgIlJUIikKCmRhdGEgPC0gZGF0YSAlPiUKICBncm91cF9ieSguZG90cz1jKCJzdWJqIiwicGFpciIpKSAlPiUKICBtdXRhdGUoQ291bnQ9cm93X251bWJlcigpKQoKcGVyY2VudF9jb3JyZWN0X2J5X3RyaWFsX2FiIDwtIGZ1bmN0aW9uKG4pIHsKICBjb3VudCA8LSBzdW0oZGF0YSRDb3VudCA9PSBuICYgZGF0YSRjaG9pY2U9PSJjb3JyIiAmIGRhdGEkcGFpciA9PSAiMTIiKQogIGNvdW50YWxsIDwtIHN1bShkYXRhJENvdW50ID09IG4gJiBkYXRhJHBhaXIgPT0gIjEyIikKICByZXR1cm4oY291bnQvY291bnRhbGwpCn0KCnBlcmNlbnRfY29ycmVjdF9ieV90cmlhbF9jZCA8LSBmdW5jdGlvbihuKSB7CiAgY291bnQgPC0gc3VtKGRhdGEkQ291bnQgPT0gbiAmIGRhdGEkY2hvaWNlPT0iY29yciIgJiBkYXRhJHBhaXIgPT0gIjM0IikKICBjb3VudGFsbCA8LSBzdW0oZGF0YSRDb3VudCA9PSBuICYgZGF0YSRwYWlyID09ICIzNCIpCiAgcmV0dXJuKGNvdW50L2NvdW50YWxsKQp9CgpwZXJjZW50X2NvcnJlY3RfYnlfdHJpYWxfZWYgPC0gZnVuY3Rpb24obikgewogIGNvdW50IDwtIHN1bShkYXRhJENvdW50ID09IG4gJiBkYXRhJGNob2ljZT09ImNvcnIiICYgZGF0YSRwYWlyID09ICI1NiIpCiAgY291bnRhbGwgPC0gc3VtKGRhdGEkQ291bnQgPT0gbiAmIGRhdGEkcGFpciA9PSAiNTYiKQogIHJldHVybihjb3VudC9jb3VudGFsbCkKfQoKI3BlcmNlbnRfY29ycmVjdF9ieV90cmlhbF9hYigxMCkKCnggPC0gMTo0NgpvdXRwdXRfYWIgPC0gbGFwcGx5KHgsIHBlcmNlbnRfY29ycmVjdF9ieV90cmlhbF9hYikgCm91dHB1dF9jZCA8LSBsYXBwbHkoeCwgcGVyY2VudF9jb3JyZWN0X2J5X3RyaWFsX2NkKSAKb3V0cHV0X2VmIDwtIGxhcHBseSh4LCBwZXJjZW50X2NvcnJlY3RfYnlfdHJpYWxfZWYpIAoKZGZfYWIgPC0gZGF0YS5mcmFtZShtYXRyaXgodW5saXN0KG91dHB1dF9hYiksIG5yb3c9bGVuZ3RoKG91dHB1dF9hYiksIGJ5cm93PVQpKQpkZl9jZCA8LSBkYXRhLmZyYW1lKG1hdHJpeCh1bmxpc3Qob3V0cHV0X2NkKSwgbnJvdz1sZW5ndGgob3V0cHV0X2NkKSwgYnlyb3c9VCkpCmRmX2VmIDwtIGRhdGEuZnJhbWUobWF0cml4KHVubGlzdChvdXRwdXRfZWYpLCBucm93PWxlbmd0aChvdXRwdXRfZWYpLCBieXJvdz1UKSkKCmNvbG5hbWVzKGRmX2FiKVtjb2xuYW1lcyhkZl9hYik9PSJtYXRyaXgudW5saXN0Lm91dHB1dF9hYi4uLm5yb3cuLi5sZW5ndGgub3V0cHV0X2FiLi4uYnlyb3cuLi5ULiJdIDwtICJwZXJjZW50X2NvcnJlY3RfYWIiCmNvbG5hbWVzKGRmX2NkKVtjb2xuYW1lcyhkZl9jZCk9PSJtYXRyaXgudW5saXN0Lm91dHB1dF9jZC4uLm5yb3cuLi5sZW5ndGgub3V0cHV0X2NkLi4uYnlyb3cuLi5ULiJdIDwtICJwZXJjZW50X2NvcnJlY3RfY2QiCmNvbG5hbWVzKGRmX2VmKVtjb2xuYW1lcyhkZl9lZik9PSJtYXRyaXgudW5saXN0Lm91dHB1dF9lZi4uLm5yb3cuLi5sZW5ndGgub3V0cHV0X2VmLi4uYnlyb3cuLi5ULiJdIDwtICJwZXJjZW50X2NvcnJlY3RfZWYiCgpkZl9hYiR0cmlhbG51bTwtcm93Lm5hbWVzKGRmX2FiKQpkZl9jZCR0cmlhbG51bTwtcm93Lm5hbWVzKGRmX2NkKQpkZl9lZiR0cmlhbG51bTwtcm93Lm5hbWVzKGRmX2VmKQojaGVhZChkZl9hYiR0cmlhbG51bSkKCmRhdGEwPC1tZXJnZShkZl9hYiwgZGZfY2QsIGJ5PSJ0cmlhbG51bSIpCmRhdGExPC0gbWVyZ2UoZGF0YTAsIGRmX2VmLCBieT0idHJpYWxudW0iKQoKZGZfYWIkdHJpYWwgPC0gc2VxLmludChucm93KGRmX2FiKSkKZGZfY2QkdHJpYWwgPC0gc2VxLmludChucm93KGRmX2NkKSkKZGZfZWYkdHJpYWwgPC0gc2VxLmludChucm93KGRmX2VmKSkKCmBgYAoKCmBgYHtyLCBlY2hvPUZBTFNFLCByZXN1bHRzPSdoaWRlJywgbWVzc2FnZT1GQUxTRX0KcGxvdDEgPC0gZ2dwbG90KGRhdGE9ZGZfYWIsIGFlcyh4PXRyaWFsLCB5PXBlcmNlbnRfY29ycmVjdF9hYiwgZ3JvdXA9MSkpICsKICBnZW9tX2xpbmUoKSsKICBnZW9tX3BvaW50KCkgKwogIHRoZW1lX2NsYXNzaWMoKSArIHNjYWxlX3hfY29udGludW91cyhuYW1lPSJUcmlhbCBOdW1iZXIiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWU9IlBlcmNlbnQgb2YgU2FtcGxlIGNob29zaW5nIDgwJSBTaGFwZSIpCgpwbG90MiA8LSBnZ3Bsb3QoZGF0YT1kZl9jZCwgYWVzKHg9dHJpYWwsIHk9cGVyY2VudF9jb3JyZWN0X2NkLCBncm91cD0xKSkgKwogIGdlb21fbGluZSgpKwogIGdlb21fcG9pbnQoKSArIAogIHRoZW1lX2NsYXNzaWMoKSArIHNjYWxlX3hfY29udGludW91cyhuYW1lPSJUcmlhbCBOdW1iZXIiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWU9IlBlcmNlbnQgb2YgU2FtcGxlIGNob29zaW5nIDcwJSBTaGFwZSIpIAoKcGxvdDMgPC0gZ2dwbG90KGRhdGE9ZGZfZWYsIGFlcyh4PXRyaWFsLCB5PXBlcmNlbnRfY29ycmVjdF9lZiwgZ3JvdXA9MSkpICsKICBnZW9tX2xpbmUoKSsKICBnZW9tX3BvaW50KCkgKyAKICB0aGVtZV9jbGFzc2ljKCkgKyBzY2FsZV94X2NvbnRpbnVvdXMobmFtZT0iVHJpYWwgTnVtYmVyIikgKwogIHNjYWxlX3lfY29udGludW91cyhuYW1lPSJQZXJjZW50IG9mIFNhbXBsZSBjaG9vc2luZyA2MCUgU2hhcGUiKQpgYGAKCiNMZWFybmluZyBDdXJ2ZXMgZm9yIGVhY2ggU2hhcGUgUGFpcgpgYGB7ciwgbWVzc2FnZT1GQUxTRSwgZmlnLndpZHRoPTh9CmFsbF9wbG90PC1nZ2FycmFuZ2UocGxvdDEsIHBsb3QyLCBwbG90MywgCiAgICAgICAgICBsYWJlbHMgPSBjKCI4MC8yMCBwYWlyIiwgIjcwLzMwIHBhaXIiLCAiNjAvNDAgcGFpciIpLCAKICAgICAgICAgIG5jb2wgPSAzLCBucm93ID0gMSkKCmFsbF9wbG90CmBgYAoKCgpgYGB7ciwgZWNobz1GQUxTRSwgcmVzdWx0cz0naGlkZScsIG1lc3NhZ2U9RkFMU0V9CnBsb3Q0IDwtIGdncGxvdChkYXRhMSwgYWVzKGFzLm51bWVyaWModHJpYWxudW0pKSkgKyAKICBnZW9tX2xpbmUoYWVzKHkgPSBwZXJjZW50X2NvcnJlY3RfYWIsIGNvbG91ciA9ICI4MC8yMCBwYWlyIikpICsgCiAgZ2VvbV9saW5lKGFlcyh5ID0gcGVyY2VudF9jb3JyZWN0X2NkLCBjb2xvdXIgPSAiNzAvMzAgcGFpciIpKSArIAogIGdlb21fbGluZShhZXMoeSA9IHBlcmNlbnRfY29ycmVjdF9lZiwgY29sb3VyID0gIjYwLzQwIHBhaXIiKSkgKwogIHRoZW1lX2NsYXNzaWMoKSArIHNjYWxlX3hfY29udGludW91cyhuYW1lPSJUcmlhbCBOdW1iZXIiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKG5hbWU9IlBlcmNlbnQgb2YgU2FtcGxlIGNob29zaW5nIEhpZ2hlciAlQ29ycmVjdCBTaGFwZSIpICsKICBsYWJzKGNvbG91ciA9ICJTaGFwZSBQYWlyIikKICAKYGBgCgoKIyBMZWFybmluZyBDdXJ2ZXMgVG9nZXRoZXIKYGBge3J9CnBsb3Q0CmBgYAoKCiNCZWdpbiBQcm9jZXNzaW5nIEdyYXBocyBmb3IgRWFjaCBQYXJ0aWNpcGFudApgYGB7ciwgLCBlY2hvPUZBTFNFLCByZXN1bHRzPSdoaWRlJyxtZXNzYWdlPUZBTFNFfQpsaWJyYXJ5KGdncGxvdDIpCmxpYnJhcnkoZ2dwdWJyKQpsaWJyYXJ5KHBseXIpCmxpYnJhcnkodGlkeXZlcnNlKQpsaWJyYXJ5KHJlc2hhcGUpCmxpYnJhcnkoZGF0YS50YWJsZSkKYGBgCgpgYGB7ciwgLCBlY2hvPUZBTFNFLCByZXN1bHRzPSdoaWRlJyxtZXNzYWdlPUZBTFNFfQpyZWFkZGF0YSA8LSBmdW5jdGlvbihmbil7CiAgICBkdF90ZW1wIDwtIGZyZWFkKGZuLCBzZXA9Ilx0IikKICAgIHJldHVybihkdF90ZW1wKQp9CgphbGwuZmlsZXMgPC0gbGlzdC5maWxlcyhwYXRoID0gIn4vRG9jdW1lbnRzL2JldmVsX2Nob2ljZS9ieV9wYXJ0aWNpcGFudF90eHRmaWxlcy8iLHBhdHRlcm4gPSAiLnR4dCIsIGZ1bGwubmFtZXMgPSBUUlVFKQpteWxpc3QgPC0gbGFwcGx5KGFsbC5maWxlcywgcmVhZGRhdGEpCm15ZGF0YSA8LSByYmluZGxpc3QobXlsaXN0LCB1c2UubmFtZXM9RkFMU0UpCgpuYW1lcyhteWRhdGEpPC1jKCJzdWJfbnVtIiwicnVuIiwidHlwZSIsImNob2ljZSIsInNpZGUiLCJvdXRjb21lIiwiY29uZ3J1ZW50IiwiUlQiKQpteWRhdGEkc2lkZTwtYXMuZmFjdG9yKG15ZGF0YSRzaWRlKQpteWRhdGEkc2lkZTwtcmV2YWx1ZShteWRhdGEkc2lkZSwgYygiMSI9ImxlZnQiLCAiMiI9InJpZ2h0IikpCgpteWRhdGEgPC0gbXlkYXRhICU+JQogZ3JvdXBfYnkoLmRvdHM9Yygic3ViX251bSIpKSAlPiUKIGRwbHlyOjptdXRhdGUoQ291bnQ9cm93X251bWJlcigpKQpgYGAKCiMgUGxvdCAiSGVhdG1hcHMiIG9mIE91dGNvbWVzIER1cmluZyBUcmFpbmluZwpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9MTF9Cm15ZGF0YSRvdXRjb21lMFtteWRhdGEkb3V0Y29tZSA9PSAiTWlzcyJdIDwtIDAKbXlkYXRhJG91dGNvbWUwW215ZGF0YSRvdXRjb21lID09ICJwdW5pc2giXSA8LSAtMTAKbXlkYXRhJG91dGNvbWUwW215ZGF0YSRvdXRjb21lID09ICJyZXdhcmQiXSA8LSAxMAoKaG1UT1RBTDwtZ2dwbG90KG15ZGF0YSxhZXMoYXMubnVtZXJpYyhDb3VudCksIGFzLmZhY3RvcihzdWJfbnVtKSAsIGZpbGw9b3V0Y29tZTApKSsKICBnZW9tX3RpbGUoKSsKICBzY2FsZV9maWxsX2dyYWRpZW50Mihsb3c9InJlZCIsIGhpZ2g9ImdyZWVuIiwgbmEudmFsdWU9ImJsYWNrIiwgbmFtZT0iIikrCiAgdGhlbWVfY2xhc3NpYygpKyB4bGFiKGxhYmVsID0gIlRyaWFsIikgKyB5bGFiKGxhYmVsPSAnU3ViamVjdCBOdW1iZXInKSsKICBndWlkZXMoZmlsbD1ndWlkZV9sZWdlbmQodGl0bGU9J091dGNvbWUnKSkKICAjZ2VvbV9wb2ludChhZXMoc2hhcGU9YXMuZmFjdG9yKGNob2ljZSksIHNpemU9MSwgY29sb3I9YXMuZmFjdG9yKGNob2ljZSkpKQpgYGAKCiMgUGxvdCAiSGVhdG1hcHMiIG9mIE91dGNvbWVzIER1cmluZyBUcmFpbmluZwojIy0xMCAocmVkKSA9IHB1bmlzaG1lbnQgKGJpdHRlciB0YXN0ZSkKIyMwICh3aGl0ZSkgPSBtaXNzZWQgcHJlc3MgKG5vIHRhc3RlKQojIzEwIChncmVlbikgPSByZXdhcmQgKHN3ZWV0IHRhc3RlKQpgYGB7cn0KaG1UT1RBTApgYGAKCk92ZXJsYXkgd2l0aCBTaGFwZSBTZWxlY3RlZCAmIE91dGNvbWUKYGBge3IsIGVjaG89RkFMU0UsIHJlc3VsdHM9J2hpZGUnLCBtZXNzYWdlPUZBTFNFfQpobVRPVEFMMTwtZ2dwbG90KG15ZGF0YSxhZXMoYXMubnVtZXJpYyhDb3VudCksIGFzLmZhY3RvcihzdWJfbnVtKSAsIGZpbGw9b3V0Y29tZTApKSsKICBnZW9tX3RpbGUoKSsKICBzY2FsZV9maWxsX2dyYWRpZW50Mihsb3c9InJlZCIsIGhpZ2g9ImdyZWVuIiwgbmEudmFsdWU9ImJsYWNrIiwgbmFtZT0iIikrCiAgdGhlbWVfY2xhc3NpYygpKyB4bGFiKGxhYmVsID0gIlRyaWFsIikgKyB5bGFiKGxhYmVsPSAnU3ViamVjdCBOdW1iZXInKSsKICBndWlkZXMoZmlsbD1ndWlkZV9sZWdlbmQodGl0bGU9J091dGNvbWUnKSkgKwogIGdlb21fcG9pbnQoYWVzKHNoYXBlPWFzLmZhY3RvcihjaG9pY2UpLCBzaXplPS43LCBjb2xvcj1hcy5mYWN0b3IoY2hvaWNlKSkpCgoKYGBgCgpgYGB7ciwgZmlnLndpZHRoPTIwLCBmaWcuaGVpZ2h0PTE2fQojaG1UT1RBTDEKYGBgCgoKYGBge3IsIGVjaG89RkFMU0UsIHJlc3VsdHM9J2hpZGUnLG1lc3NhZ2U9RkFMU0V9Cm1vcmVfZGF0YTwtcmVhZC50YWJsZSgifi9Eb2N1bWVudHMvYmV2ZWxfY2hvaWNlL2NsZWFuX2JldmVsLmNzdiIsaGVhZGVyPVQsIHNlcD0iLCIpCm1vcmVfZGF0YSRzdWJfbnVtPC1yb3cubmFtZXMobW9yZV9kYXRhKQpoZWFkKG1vcmVfZGF0YSRzdWJfbnVtKQoKZGF0YTA8LW1lcmdlKG15ZGF0YSwgbW9yZV9kYXRhLCBieT0ic3ViX251bSIpCgpgYGAKCiNTcGxpdCBJbnRvIEdyb3VwcyBCYXNlZCBvbiBQb3N0dGVzdCBQZXJmb3JtYW5jZQpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9MTF9CnN1bW1hcnkoZGF0YTAkc2Vuc2l0aXZpdHlfcmV3YXJkKQpkYXRhMCRsZWFybltkYXRhMCRzZW5zaXRpdml0eV9yZXdhcmQgPCAwLjQ0NF08LSAiZGlkbid0IGxlYXJuIgpkYXRhMCRsZWFybltkYXRhMCRzZW5zaXRpdml0eV9yZXdhcmQgPj0gMC40NDQgJiBkYXRhMCRzZW5zaXRpdml0eV9yZXdhcmQgPCAwLjUgIF08LSAibWF5YmUgbGVhcm4iCmRhdGEwJGxlYXJuWyBkYXRhMCRzZW5zaXRpdml0eV9yZXdhcmQgPj0gMC41ICYgZGF0YTAkc2Vuc2l0aXZpdHlfcmV3YXJkIDwgMC41NyBdPC0gIm9rIgpkYXRhMCRsZWFyblsgZGF0YTAkc2Vuc2l0aXZpdHlfcmV3YXJkID49IDAuNTddPC0gInByZXR0eSBnb29kIgpzdW1tYXJ5KGFzLmZhY3RvcihkYXRhMCRsZWFybikpCgpobVRPVEFMZ29vZDwtZ2dwbG90KHN1YnNldChkYXRhMCwgbGVhcm4gPT0gInByZXR0eSBnb29kIiksYWVzKGFzLm51bWVyaWMoQ291bnQpLCBhcy5mYWN0b3Ioc3ViX251bSkgLGZpbGw9b3V0Y29tZTApKSsKICBnZW9tX3RpbGUoKSsKICBzY2FsZV9maWxsX2dyYWRpZW50Mihsb3c9InJlZCIsIGhpZ2g9ImdyZWVuIiwgbmEudmFsdWU9ImJsYWNrIiwgbmFtZT0iIikgKwogIHRoZW1lX2NsYXNzaWMoKSsgeGxhYihsYWJlbCA9ICJUcmlhbCIpICsgeWxhYihsYWJlbD0gJ1N1YmplY3QgTnVtYmVyJykgKwogIGd1aWRlcyhmaWxsPWd1aWRlX2xlZ2VuZCh0aXRsZT0nT3V0Y29tZScpKSAKICAjZ2VvbV9wb2ludChhZXMoc2hhcGU9YXMuZmFjdG9yKGNob2ljZSksIHNpemU9MSwgY29sb3I9YXMuZmFjdG9yKGNob2ljZSkpKQojaG1UT1RBTGdvb2QKCgpobVRPVEFMYmFkPC1nZ3Bsb3Qoc3Vic2V0KGRhdGEwLCBsZWFybiA9PSAiZGlkbid0IGxlYXJuIiksYWVzKGFzLm51bWVyaWMoQ291bnQpLCBhcy5mYWN0b3Ioc3ViX251bSkgLGZpbGw9b3V0Y29tZTApKSsKICBnZW9tX3RpbGUoKSsKICBzY2FsZV9maWxsX2dyYWRpZW50Mihsb3c9InJlZCIsIGhpZ2g9ImdyZWVuIiwgbmEudmFsdWU9ImJsYWNrIiwgbmFtZT0iIikgKwogIHRoZW1lX2NsYXNzaWMoKSsgeGxhYihsYWJlbCA9ICJUcmlhbCIpICsgeWxhYihsYWJlbD0gJ1N1YmplY3QgTnVtYmVyJykgKwogIGd1aWRlcyhmaWxsPWd1aWRlX2xlZ2VuZCh0aXRsZT0nT3V0Y29tZScpKSAKICAjZ2VvbV9wb2ludChhZXMoc2hhcGU9YXMuZmFjdG9yKGNob2ljZSksIHNpemU9MSwgY29sb3I9YXMuZmFjdG9yKGNob2ljZSkpKQojaG1UT1RBTGJhZAoKdGVzdDE8LWdnYXJyYW5nZShobVRPVEFMZ29vZCxobVRPVEFMYmFkLCAKICAgICAgICAgIGxhYmVscyA9IGMoIkdvb2QgUG9zdHRlc3QiLCAiQmFkIFBvc3R0ZXN0IiksIAogICAgICAgICAgbmNvbCA9IDEsIG5yb3cgPSAyKQoKYGBgCgoKI1NwbGl0IEludG8gR3JvdXBzIEJhc2VkIG9uIFBvc3R0ZXN0IFBlcmZvcm1hbmNlCmBgYHtyLCBmaWcud2lkdGg9OCwgZmlnLmhlaWdodD0xMX0KdGVzdDEKYGBgCgoKYGBge3IsIGVjaG89RkFMU0UsIHJlc3VsdHM9J2hpZGUnLG1lc3NhZ2U9RkFMU0V9CmRhdGEwJGNob2ljZTBbZGF0YTAkY2hvaWNlID09ICJNaXNzIl0gPC0gMAojIGdvb2QKZGF0YTAkY2hvaWNlMFtkYXRhMCRjaG9pY2UgPT0gIkEiXSA8LSAzMApkYXRhMCRjaG9pY2UwW2RhdGEwJGNob2ljZSA9PSAiQyJdIDwtIDIwCmRhdGEwJGNob2ljZTBbZGF0YTAkY2hvaWNlID09ICJFIl0gPC0gMTAKIyBiYWQKZGF0YTAkY2hvaWNlMFtkYXRhMCRjaG9pY2UgPT0gIkIiXSA8LSAtMzAKZGF0YTAkY2hvaWNlMFtkYXRhMCRjaG9pY2UgPT0gIkQiXSA8LSAtMjAKZGF0YTAkY2hvaWNlMFtkYXRhMCRjaG9pY2UgPT0gIkYiXSA8LSAtMTAKCmhtVE9UQUxnb29kX2ZsaXA8LWdncGxvdChzdWJzZXQoZGF0YTAsIGxlYXJuID09ICJwcmV0dHkgZ29vZCIpLGFlcyhhcy5udW1lcmljKENvdW50KSwgYXMuZmFjdG9yKHN1Yl9udW0pICxmaWxsPWNob2ljZTApKSsKICBnZW9tX3RpbGUoKSsKICBzY2FsZV9maWxsX2dyYWRpZW50Mihsb3c9InBpbmsiLCBoaWdoPSJibHVlIiwgbmEudmFsdWU9ImJsYWNrIiwgbmFtZT0iIikgKwogIHRoZW1lX2NsYXNzaWMoKSsgeGxhYihsYWJlbCA9ICJUcmlhbCIpICsgeWxhYihsYWJlbD0gJ1N1YmplY3QgTnVtYmVyJykrCiAgZ3VpZGVzKGZpbGw9Z3VpZGVfbGVnZW5kKHRpdGxlPSdDaG9pY2UnKSkgCiAgI2dlb21fcG9pbnQoYWVzKHNoYXBlPWFzLmZhY3RvcihvdXRjb21lKSwgc2l6ZT0xLCBjb2xvcj1hcy5mYWN0b3Iob3V0Y29tZSkpKQojaG1UT1RBTGdvb2RfZmxpcAoKCmhtVE9UQUxiYWRfZmxpcDwtZ2dwbG90KHN1YnNldChkYXRhMCwgbGVhcm4gPT0gImRpZG4ndCBsZWFybiIpLGFlcyhhcy5udW1lcmljKENvdW50KSwgYXMuZmFjdG9yKHN1Yl9udW0pICxmaWxsPWNob2ljZTApKSsKICBnZW9tX3RpbGUoKSsKICBzY2FsZV9maWxsX2dyYWRpZW50Mihsb3c9InBpbmsiLCBoaWdoPSJibHVlIiwgbmEudmFsdWU9ImJsYWNrIiwgbmFtZT0iIikgKyAKICB0aGVtZV9jbGFzc2ljKCkrIHhsYWIobGFiZWwgPSAiVHJpYWwiKSArIHlsYWIobGFiZWw9ICdTdWJqZWN0IE51bWJlcicpICsKICBndWlkZXMoZmlsbD1ndWlkZV9sZWdlbmQodGl0bGU9J0Nob2ljZScpKSAKICAjZ2VvbV9wb2ludChhZXMoc2hhcGU9YXMuZmFjdG9yKG91dGNvbWUpLCBzaXplPTEsIGNvbG9yPWFzLmZhY3RvcihvdXRjb21lKSkpCiNobVRPVEFMYmFkX2ZsaXAKCnRlc3QyPC1nZ2FycmFuZ2UoaG1UT1RBTGdvb2RfZmxpcCxobVRPVEFMYmFkX2ZsaXAsIAogICAgICAgICAgbGFiZWxzID0gYygiR29vZCBQb3N0dGVzdCIsICJCYWQgUG9zdHRlc3QiKSwKICAgICAgICAgIG5jb2wgPSAxLCBucm93ID0gMikKCmBgYAoKI1Bsb3QgIkhlYXRtYXBzIiBvZiBDaG9pY2VzIER1cmluZyBUcmFpbmluZwojIy0zMCAocGluaykgPSBDaG9vc2UgRiAoNDAlIGNvcnJlY3QpCiMjLTIwIChtaWQgcGluaykgPSBDaG9vc2UgRCAoMzAlIGNvcnJlY3QpCiMjLTEwIChsaWdodCBwaW5rKSA9IENob29zZSBCICgyMCUgY29ycmVjdCkKIyMwICh3aGl0ZSkgPSBtaXNzZWQgcHJlc3MgKG5vIGNob2ljZSkKIyMxMCAobGlnaHQgYmx1ZSkgPSBDaG9vc2UgRSAoNjAlIGNvcnJlY3QpCiMjMjAgKG1pZCBibHVlKSA9IENob29zZSBDICg3MCUgY29ycmVjdCkKIyMzMCAoYmx1ZSkgPSBDaG9vc2UgQSAoODAlIGNvcnJlY3QpCgpgYGB7ciwgZmlnLndpZHRoPTgsIGZpZy5oZWlnaHQ9MTF9CnRlc3QyCmBgYAoKI0FyZSB0aGVyZSBkaWZmZXJlbmNlcyBpbiB0cmFpbmluZyBiZXR3ZWVuIHBvc3N0ZXN0IGdyb3Vwcz8gCmBgYHtyfQpteXRhYmxlIDwtIHh0YWJzKH5jaG9pY2UrbGVhcm4sIGRhdGE9ZGF0YTApCmZ0YWJsZShteXRhYmxlKSAjIHByaW50IHRhYmxlIApzdW1tYXJ5KG15dGFibGUpICMgY2hpLXNxdWFyZSB0ZXN0IG9mIGluZGVwZWRlbmNlCgpteXRhYmxlIDwtIHh0YWJzKH5vdXRjb21lK2xlYXJuLCBkYXRhPWRhdGEwKQpmdGFibGUobXl0YWJsZSkgIyBwcmludCB0YWJsZSAKc3VtbWFyeShteXRhYmxlKSAjIGNoaS1zcXVhcmUgdGVzdCBvZiBpbmRlcGVkZW5jZQoKCm15dGFibGUgPC0geHRhYnMofmNvbmdydWVudCtsZWFybiwgZGF0YT1kYXRhMCkKZnRhYmxlKG15dGFibGUpICMgcHJpbnQgdGFibGUgCnN1bW1hcnkobXl0YWJsZSkgIyBjaGktc3F1YXJlIHRlc3Qgb2YgaW5kZXBlZGVuY2UKCmBgYAojIEFoIGhhIG1vbWVudAojVGhlcmUgaXMgYSBkaWZmZXJlbmNlIGJldHdlZW4gdGhlIG51bWJlciBvZiBtaXNtYXRjaGVkIHRyaWFscyBpbiB0aGUgImxlYXJuZXJzIiBhbmQgIm5vbiBsZWFybmVycy4iIFRob3NlIHdobyAiZG9uJ3QgbGVhcm4iIGhhdmUgbW9yZSBtaXNtYXRjaGVzLgoKI0hpc3RvZ3JhbXMK